<?php
class Evaluacion_model extends CI_Model {
    
	//constructor de la clase
    function __construct() {
        //LLamar al constructor del Modelo
        parent::__construct();
    }
	
	
function ediciones($id_edicion=NULL)
{
        $where="";
        $band=false;
        if ($id_edicion!=NULL) {
            $where="WHERE id_edicion = $id_edicion";
            $band=true;
        }
        
        $q="SELECT * FROM  edp_edicion  ".$where;
        $query=$this->db->query($q);

        if ($band) {
            $r=(array)$query->row();
        } else {
            $r=$query->result_array();
        }        

        return $r;
}
function guardar_edicion($info)
{
    extract($info);
    $q="INSERT INTO edp_edicion ( `nombre`, `estado`) 
                        VALUES ( '$nombre', '0');";    
    $query=$this->db->query($q); 
    return $this->db->insert_id(); 
}
function guardar_detalle_edicion($info)
{
    extract($info);
    $q="INSERT INTO edp_edicion_detalle(`id_edicion`, `id_perfil`, `id_categoria`) VALUES ($id_edicion, $id_perfil, $id_categoria)
        ON DUPLICATE KEY UPDATE  id_perfil =VALUES   (id_perfil)";    
    $query=$this->db->query($q); 
    
}
function actualizar_edicion($info)
{
    extract($info);
    $q="UPDATE edp_edicion SET nombre = '$nombre' WHERE id_edicion=$id_edicion";    
    $query=$this->db->query($q); 
    
}
function cambiar_estado_edicion($id_edicion=NULL, $estado=NULL)
{
    if ($estado==1) {
        $q="UPDATE edp_edicion SET estado= '0' WHERE estado=1";        
        $query=$this->db->query($q); 
    }
    
    $q="UPDATE edp_edicion SET estado= '$estado' WHERE id_edicion=$id_edicion";        
    $query=$this->db->query($q); 
    
}
function eliminar_edicion($id_edicion)
{
    $q="DELETE FROM edp_edicion_detalle WHERE id_edicion = ".$id_edicion;    
    $query=$this->db->query($q); 
    $q="DELETE FROM edp_edicion WHERE id_edicion = ".$id_edicion;    
    $query=$this->db->query($q); 
}
function detalle_edicion($id_edicion='', $categorias_no_inluiidas=FALSE)
{
    $q=" SELECT
        id_categoria,
        id_edicion,
        id_perfil,
        categoria,
        descripcion
    FROM
        edp_edicion_detalle
    INNER JOIN edp_categoria USING (id_categoria)
    WHERE
        id_edicion = $id_edicion";

    if ($categorias_no_inluiidas) {
        $q.=" UNION
        SELECT
            c.id_categoria,
            $id_edicion,
            0,
            c.categoria,
            c.descripcion
        FROM
            edp_categoria c
        WHERE
            id_categoria NOT IN (
                SELECT
                    id_categoria
                FROM
                    edp_edicion_detalle WHERE id_edicion= $id_edicion
            )  ORDER BY 1 ASC";
    }

    $query=$this->db->query($q);
    return $query->result_array();
}

function edicion_activa()
{
    $q="SELECT * FROM  edp_edicion  WHERE estado =1";
        $query=$this->db->query($q);        
    $r=(array)$query->row();

    if (sizeof($r)==0) {
        return 0;
    }else{
        return $r['id_edicion'];
    }


}

function empleados($opcion=0, $parem2=NULL)
{
    $where="";
    switch ($opcion) {
        case 0:  //todos
            
            $where=" ";
            break;
        case 1:  //todos los que son jefe de nivel 1 o nivel 2
            $where="WHERE nivel_funcional = 1 OR  nivel_funcional = 2";
            break;
        case 2: //un empleado
            
               $where="WHERE id_empleado=$parem2";
            break;
        case 3: // todos los que dependen de una seccion y son jefes
                        $id_seccion=$parem2;
                $where=" WHERE  ( nivel_funcional = 1 OR  nivel_funcional = 2)
                          AND (
                             id_seccion = $id_seccion
                            OR id_padre = $id_seccion
                            OR id_abuelo = $id_seccion
                            OR id_bisabuelo = $id_seccion
                            OR id_tatarabuelo = $id_seccion
                            ) ";
            break;
        case 4: // todos los que dependen de una seccion
                        $id_seccion=$parem2;
                $where=" WHERE   id_seccion = $id_seccion
                            OR id_padre = $id_seccion
                            OR id_abuelo = $id_seccion
                            OR id_bisabuelo = $id_seccion
                            OR id_tatarabuelo = $id_seccion";
            break;
        default:
            
            break;
    }
    $q="SELECT id_empleado, nr, nombre,  funcional  FROM tcm_empleado ".$where;
     $query=$this->db->query($q);
    return $query->result_array();   
}

function empleados_asignados($id_empleado=NULL, $id_edicion=NULL)
{
    
    $where=" WHERE id_estado=1 ";
    if ($id_empleado!=NULL) {
        $where.="AND id_empleado_evaluador = $id_empleado";
    }
    if ($id_edicion!=NULL) {
        $where.=" AND id_edicion = $id_edicion";
    }
     $q="SELECT
            e.id_empleado, e.nr, e.nombre,  e.funcional, ev.id_evaluacion, ev.estado
        FROM
            tcm_empleado  e INNER JOIN edp_asignacion  ev ON e.id_empleado = ev.id_empleado ".$where;
                
     $query=$this->db->query($q);
    return $query->result_array();      
}
function empleados_asignados_en_edicion($id_edicion)
{
     $q="SELECT
            id_empleado,
            id_empleado_evaluador
        FROM
            edp_asignacion  
        WHERE
         id_edicion = $id_edicion AND estado=0";
     $query=$this->db->query($q);
    return $query->result_array();      
}

function empleados_no_asignados($id_edicion=NULL, $id_seccion=NULL)
{
        $seccion= " id_seccion IS NOT NULL ";
        if ($id_seccion!=NULL) {
            $seccion= "    (id_seccion = $id_seccion
                            OR id_padre = $id_seccion
                            OR id_abuelo = $id_seccion
                            OR id_bisabuelo = $id_seccion
                            OR id_tatarabuelo = $id_seccion );";
        }
        $q=" SELECT a.id_empleado, nr, nombre,  funcional FROM tcm_empleado a
        LEFT  JOIN  (SELECT id_empleado FROM edp_asignacion     WHERE id_edicion = $id_edicion ) AS b
        ON a.id_empleado = b.id_empleado WHERE a.id_estado=1 AND b.id_empleado IS NULL AND ".$seccion;
     $query=$this->db->query($q);
    return $query->result_array();      
}

function total_empleados()
{
    $q="SELECT id_empleado, nr, nombre, funcional FROM tcm_empleado WHERE id_estado= 1";
    $query=$this->db->query($q);
    return $query->result_array();      
}
function total_no_evaluados($id_edicion)
{
    $q="SELECT
    t.id_empleado,
    t.nr,
    t.nombre,
    t.funcional,
    t.seccion,
    r.descripcion as razon
    FROM
        tcm_empleado t
    INNER JOIN edp_asignacion a ON a.id_empleado=t.id_empleado
    INNER JOIN edp_razon r ON r.id_razon= a.id_razon
    WHERE
        id_estado = 1 AND id_edicion = $id_edicion AND estado = 2";  //el id_estado  =1 es de empledo activo, y en estado = 2 es empleado no evaluado
        $query=$this->db->query($q);
return $query->result_array();      
}
 function total_empleados_por_evaluar($id_edicion='')
{
    $q="SELECT
        t.id_empleado,
        t.nr,
        t.nombre,
        t.funcional,
        t.seccion
    FROM
        edp_asignacion a
    INNER JOIN tcm_empleado t USING (id_empleado)
    WHERE
        id_estado = 1
    AND estado = 0
    AND id_edicion = $id_edicion";
    
    $query=$this->db->query($q);
    return $query->result_array();      

}
function guardar_asignacion($info)
{
    extract($info);
    $q="INSERT INTO edp_asignacion(
    `id_empleado`,
    `id_edicion`,
    `id_empleado_evaluador`,
    `estado`
)
VALUES
    ($id_empleado, $id_edicion, $id_empleado_evaluador, 0);";    
    $query=$this->db->query($q); 
}
function eliminar_asignacion($id_evaluacion)
{

    $q="DELETE FROM edp_asignacion WHERE id_evaluacion=$id_evaluacion";
    $query=$this->db->query($q); 
}
function eliminar_asignacion2($id_empleado, $id_edicion)
{

    $q="DELETE FROM edp_asignacion WHERE id_empleado=$id_empleado AND id_edicion = $id_edicion";
    $query=$this->db->query($q); 
}
function get_questions($id_evaluacion)
{
            //justifiacion y nota son variables vacias ya que esta consulta es cuando se realizara una evaluacion nueva
    $q="SELECT pr.*, fa.id_factor,  lower(fa.factor) as factor, pe.id_perfil, '' as  justificacion, 0 as nota  FROM edp_pregunta pr   
                INNER JOIN  edp_perfil pe USING(id_perfil)
                INNER JOIN edp_factor fa USING(id_factor)
                INNER JOIN edp_edicion_detalle ed ON ed.id_perfil = pe.id_perfil                                                
                INNER JOIN edp_asignacion ev ON ev.id_edicion = ed.id_edicion
                INNER JOIN tcm_empleado em ON em.id_empleado= ev.id_empleado AND em.nivel_funcional = ed.id_categoria
                WHERE ev.id_evaluacion = $id_evaluacion
ORDER BY fa.id_factor ASC";
    $query=$this->db->query($q); 
    return $query->result_array();         
}

function calificaciones()
{    
    $q="SELECT * FROM edp_calificacion";
    $query=$this->db->query($q); 
    return $query->result_array();            
}

function guardar_evaluacion_version($info)
{       
    //extract  $id_evaluacion, $id_usuario, $id_perfil
    extract($info);

    //ultima
    $q="UPDATE edp_evaluacion_version SET ultima = false, conforme=0 WHERE id_evaluacion = $id_evaluacion;";
    $query=$this->db->query($q); 

    // version
    $q="SELECT COUNT(*) as c FROM edp_evaluacion_version WHERE id_evaluacion = $id_evaluacion;";
    $query=$this->db->query($q); 
    $row=$query->row();
    $version=$row->c;
    $version++;


    //actualizacion en la tabla edp_asignacion
    $q="UPDATE edp_asignacion SET estado = 1, id_perfil=$id_perfil WHERE id_evaluacion = $id_evaluacion;";
    $query=$this->db->query($q); 

    //insert
     $q="INSERT INTO edp_evaluacion_version( ultima, version, fecha_creacion, id_evaluacion, id_usuario_creacion, conforme) 
    VALUES ( TRUE, $version, CONCAT(CURDATE(),' ',CURTIME()), $id_evaluacion, $id_usuario,$conformidad);";    
    $query=$this->db->query($q); 

    return $this->db->insert_id();
}
function guardar_respuesta($info)
{
    extract($info);
    $q="INSERT INTO edp_respuesta( `nota`, `justificacion`, `id_evaluacion_version`, `id_pregunta`) 
                    VALUES ( $nota, '$justificacion', $id_evaluacion_version, $id_pregunta)";    
    $query=$this->db->query($q);    
}
function guardar_capacitacion_solicitada($info='')
{
        extract($info);
    $q="INSERT INTO edp_cap_solicitada ( `id_capacitacion`, `id_evaluacion`) VALUES ( $id_capacitacion, $id_evaluacion);";    
    $query=$this->db->query($q);    

}
function evaluacion($id_evaluacion)
{    
    $q="SELECT a.id_perfil, f.factor, f.id_factor, p.id_pregunta, p.pregunta, p.ponderacion,r.nota,c.calificacion, r.justificacion, (ponderacion * nota *0.20) as notap
        FROM edp_evaluacion_version ev 
        INNER JOIN  edp_respuesta r ON ev.id_evaluacion_version = r.id_evaluacion_version
        INNER JOIN edp_pregunta p ON p.id_pregunta= r.id_pregunta
        INNER JOIN edp_factor f on p.id_factor = f.id_factor
        INNER JOIN edp_calificacion c ON  c.id_calificacion=r.nota
        INNER JOIN edp_asignacion a ON a.id_evaluacion = ev.id_evaluacion
        WHERE ev.ultima = 1 AND ev.id_evaluacion = $id_evaluacion";
    $query=$this->db->query($q); 
    return $query->result_array();            
}
function evaluacion2($id_evaluacion='',$ultima=1)
{

    if ($ultima!=1) {
        $where="AND  ev.version=2";
    }else{
        $where=" AND ev.ultima = 1";
    }
       $q="SELECT f.factor, ev.version, 
                GROUP_CONCAT(p.pregunta SEPARATOR '**') as preguntas, 
                GROUP_CONCAT(p.ponderacion) as ponderaciones,
                GROUP_CONCAT(r.nota) as notas, 
                GROUP_CONCAT(c.calificacion) as calificaciones, 
                GROUP_CONCAT(r.justificacion SEPARATOR '**') as justificaciones, 
                GROUP_CONCAT( ROUND((ponderacion * nota * 0.20))) as notap
            FROM edp_evaluacion_version ev 
                INNER JOIN  edp_respuesta r ON ev.id_evaluacion_version = r.id_evaluacion_version
                INNER JOIN edp_pregunta p ON p.id_pregunta= r.id_pregunta
                INNER JOIN edp_factor f on p.id_factor = f.id_factor
                INNER JOIN edp_calificacion c ON  c.id_calificacion=r.nota
                WHERE  ev.id_evaluacion = $id_evaluacion $where
        GROUP BY f.id_factor";
    $query=$this->db->query($q); 
    return $query->result_array();            
}
function get_datos_personales($id_evaluacion='')
{
    $q="SELECT
        UPPER(t.nombre) AS nombre,
        t.id_genero,
        DATE_FORMAT(e.fecha_ingreso,'%d-%m-%Y') AS ingreso,
        t.nr,
        DATE_FORMAT(FROM_DAYS(TO_DAYS(NOW())-TO_DAYS(e.fecha_nacimiento)), '%Y')+0 AS edad,
        UPPER(t.funcional) AS funcional, 
        UPPER(t.seccion)  AS seccion,
        UPPER(CONCAT_WS(' ',j.primer_nombre,j.segundo_nombre, j.tercer_nombre, j.primer_apellido, j.segundo_apellido, j.apellido_casada)) AS jefe
    FROM
        tcm_empleado t
    INNER JOIN sir_empleado e USING (id_empleado)
    INNER JOIN edp_asignacion a ON t.id_empleado = a.id_empleado
    INNER JOIN sir_empleado j ON j.id_empleado = a.id_empleado_evaluador
    WHERE
        id_evaluacion = $id_evaluacion";
    $query=$this->db->query($q); 
    return (array) $query->row();
}
function inconformes($id_edicion=NULL,$revisados=FALSE)
{

    if ($revisados) {
        $where="  version =3 OR (version =2 AND ultima=1 AND conforme=0 )"; //ya han sido revisados 
    }else{
        $where="  version =2 AND ultima=1 AND conforme =0";         //les falta un revision
    }

    $q="SELECT
            a.id_evaluacion,
            e.nombre, 
            e.seccion,
            e.funcional,
            e.seccion,
            e.nr,
            version
        FROM
            edp_asignacion a
        INNER JOIN edp_evaluacion_version v ON a.id_evaluacion = v.id_evaluacion
        INNER JOIN tcm_empleado e ON e.id_empleado = a.id_empleado
        WHERE          
        
        $where
        AND id_edicion = $id_edicion";
    $query=$this->db->query($q); 
    return $query->result_array();
}

function evaluados($id_edicion)
{
    $q="SELECT
    t.nombre, t.id_empleado,t.nr, t.seccion
FROM
    edp_asignacion a
    INNER JOIN tcm_empleado t  USING(id_empleado)
     WHERE id_edicion = $id_edicion AND estado = 1";  //dos sera no evaluado con justificacion
        $query=$this->db->query($q); 
    return $query->result_array();
}

function evaluaciones_por_dia($id_edicion)
{
    $q="SELECT
            COUNT(v.id_evaluacion) AS a,
             DATE_FORMAT(fecha_creacion,'%Y-%m-%d') as y,
             DATE_FORMAT(fecha_creacion,'%d-%m-%Y') as year
        FROM
            edp_asignacion a
        INNER JOIN edp_evaluacion_version v ON a.id_evaluacion = v.id_evaluacion
        AND v.ultima = TRUE 
        WHERE id_edicion =$id_edicion
        GROUP BY DATE_FORMAT(fecha_creacion,'%d-%m-%Y') 
        ORDER BY fecha_creacion ASC";
        $query=$this->db->query($q); 
    return $query->result_array();
}

public function confirmar_asignacion($id_empleado=NULL,$accion=NULL)
{
    $q="UPDATE  edp_asignacion SET confirmacion = $accion WHERE id_empleado_evaluador = $id_empleado";
    $query=$this->db->query($q); 
}

function razones()
{
    $q="SELECT * FROM edp_razon;";
        $query=$this->db->query($q); 
    return $query->result_array();
}
function omitir_evaluacion($info)
{
    extract($info);
    $q="UPDATE edp_asignacion SET estado=2, id_razon=$razon,informacion='$informacion' WHERE id_evaluacion=$id_evaluacion;";
    $query=$this->db->query($q); 
}
function reactivar_evaluacion($info)
{
    extract($info);
    $q="UPDATE edp_asignacion SET estado=1, id_razon=NULL,informacion='' WHERE id_evaluacion=$id_evaluacion;";
    $query=$this->db->query($q); 
}


function categoria_evaluacion($id_evaluacion)
{
    $q="SELECT
            c.*
        FROM
            edp_categoria c
        INNER JOIN tcm_empleado t ON t.nivel_funcional = c.id_categoria
        INNER JOIN edp_asignacion a ON a.id_empleado = t.id_empleado
        WHERE id_evaluacion = $id_evaluacion";
    $query=$this->db->query($q); 
    return (array) $query->row();
}
function evaluador_datos($id_evaluacion)
{
    $q="SELECT
        UPPER(t.nombre) AS nombre,
        UPPER(t.funcional) AS cargo,
        id_genero
        FROM
            tcm_empleado t
        INNER JOIN edp_asignacion a ON a.id_empleado_evaluador = t.id_empleado
        WHERE
            id_evaluacion = $id_evaluacion";
    $query=$this->db->query($q); 
    return (array) $query->row();
}
}
?>
